﻿/**
 *
 * @file GUIContourPlotDialog.h
 * @brief   后处理云图参数界面
 * @author XingXuanCi (xingxuanci@diso.cn)
 * @date 2024-11-21
 *
 */
#ifndef GUIContourPlotDialog_H
#define GUIContourPlotDialog_H

#include "GUIPostDialogAPI.h"
#include "FITK_Kernel/FITKCore/FITKAbstractGUI.h"

namespace Ui {
class GUIContourPlotDialog;
}


namespace Acoustics 
{
    class FITKAcousticsContourPlotData;
}

namespace GUI
{
    /**
     * @brief   后处理云图参数界面
     * @author  TanDongYang (tandongyang@diso.cn)
     * @date    2024-11-26 
     */
    class GUIPostDialogAPI GUIContourPlotDialog : public Core::FITKDialog
    {
        Q_OBJECT

    public:
        /**
         * @brief   Construct a new GUIContourPlotDialog object
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-26 
         */
        explicit GUIContourPlotDialog(QWidget *parent = nullptr);

        /**
         * @brief   Destroy the GUIContourPlotDialog object
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-26 
         */
        ~GUIContourPlotDialog();

        /**
         * @brief   设置工况载荷名称列表数据
         * @param[i]   val  名称列表数据
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-26 
         */
        void setListLoadCases(QStringList val) { _listLoadCases = val; }

        /**
         * @brief   设置工程单位类型
         * @param[i]   val
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-26 
         */
        void setListEngUnitsType(QStringList val) { _listEngUnitsType = val; }

        /**
         * @brief   设置后处理参数数据对象
         * @param[i]   val  数据对象
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-26 
         */
        void setPlotData(Acoustics::FITKAcousticsContourPlotData* val) { _plotData = val; }

        /**
         * @brief   设置频率数据组
         * @param[i]   val  数据
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-26 
         */
        void setListHz(std::vector<float> val) { _listHz = val; }

        /**
         * @brief   初始化界面数据
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-26 
         */
        void init();

        /**
         * @brief   更新比例数值状态
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-28 
         */
        void updateScaleState();


        void updatePressureUnits();

    signals:
        /**
         * @brief   按钮应用信号
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-26 
         */
        void dialogApplySignal();

    protected slots:
        
        /**
         * @brief   按钮应用点击槽
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-26 
         */
        void on_pushButton_Apply_clicked();

        /**
         * @brief   按钮确定点击槽
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-26 
         */
        void on_pushButton_OK_clicked();

        /**
         * @brief   按钮关闭点击槽
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-26 
         */
        void on_pushButton_Close_clicked();

        /**
         * @brief   更新控件状态基于显示状态
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-26 
         */
        void updateControlStateByDisplay_Slot();

        /**
         * @brief   更新控件状态基于梁XYE控件状态
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-26 
         */
        void updateControlStateByBeamsXYE_Slot();

        /**
         * @brief   更新控件状态基于梁T控件状态
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-26 
         */
        void updateControlStateByBeamsT_Slot();

        /**
         * @brief   更新界面标题内容
         * @param[i]   i    无用数据占位
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-26 
         */
        void updateTitle_Slot(int i);

        /**
         * @brief   速度DB点击处理槽
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-28 
         */
        void on_checkBox_Velocity_DB_clicked();

        /**
         * @brief   声压DB点击处理槽
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-28 
         */
        void on_checkBox_Pressure_DB_clicked();

        /**
         * @brief   声压A计权点击处理槽
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-29 
         */
        void on_checkBox_Pressure_A_clicked();

        /**
         * @brief   工程单位类型索引变化槽
         * @param[i]    索引值
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-28 
         */
        void on_comboBox_EngUnitsType_currentIndexChanged(int index);

    protected:

        /**
         * @brief   加载数据到界面
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-26 
         */
        void loadData();

        void loadDataGeneral();
        void loadDataScaling();
        void loadDataWaveFields();

        /**
         * @brief   存储数据到数据结构
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-26 
         */
        void saveData();
        void saveDataGeneral();
        void saveDataScaling();
        void saveDataWaveFields();

        /**
         * @brief   清空控件数据
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-26 
         */
        void clearControlData();

    private:
        /**
         * @brief   ui
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-26 
         */
        Ui::GUIContourPlotDialog *_ui;

        /**
         * @brief   频率数据组
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-26 
         */
        std::vector<float> _listHz;

        /**
         * @brief   载荷名称组
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-26 
         */
        QStringList _listLoadCases;

        /**
         * @brief   工程单位类型组
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-26 
         */
        QStringList _listEngUnitsType;

        /**
         * @brief   数据对象
         * @author  TanDongYang (tandongyang@diso.cn)
         * @date    2024-11-26 
         */
        Acoustics::FITKAcousticsContourPlotData* _plotData{};


    };
}
#endif // GUIContourPlotDialog_H
